#ifndef GAMEAREA_H
#define GAMEAREA_H

#include <QObject>
#include <QWidget>
#include <QTime>
#include "item.h"

    class GameArea : public QWidget
{
    Q_OBJECT
public:
    explicit GameArea(QWidget *parent = nullptr);   //构造函数


    void DrawBKRects();         //画用作背景的方块
    void DrawFixedRects();      //画下落后已固定不动的方块
    void DrawCurItem();         //画当前下落中的方块

    void NewGame();             //开始游戏
    void KeyPressed(int key);   //识别按键，操作游戏

    bool HitSide();             //判断当前下落方块是否超左右边界
    bool HitBottom();           //判断当前下落方块是否达到底部
    bool HitTop();              //判断当前下落方块是否达到顶部
    void AddToFixedRects();     //把当前方块加入到 固定方块
    void DeleteFullRows();      //删除完整的行

    int GetLevelTime(int level);   //获取不同等级关卡对应的定时器时间，关卡越高，时间越快(短)。比如1关=1s,2关=900ms,3关=800ms
    void PauseGame(bool Gamestatus);  //暂停游戏
    void StopGame();                //停止游戏

signals:
    void sigUpdateNextItem(ITEM_TYPE t,int nShape); //产生下一个方块类型信号
    void sigUpdateScore(int nScore);                //游戏分数信号
    void sigUpdateLevel(int nSpeed);                //游戏等极信号
    void sigUdateTimeEslape(int tPlayed);           //游戏时间信息

protected:
    void paintEvent(QPaintEvent *);                //绘图事件
    void timerEvent(QTimerEvent*);                //定时事件




private:
    Item mFixItems;     //已落下、固定住了的方块们
    Item mCurItem;      //当前移动中的方块
    Item mNextItem;     //下一个方块
    bool item_swap;

    int mTimerID;       //定时器ID
    int mScore;         //得分
    int mLevel;         //关卡
    int maxScore;
    QTime playTime;     //游戏时间

};

#endif
